home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / lib / include / dev / vmelink.h < prev    next >
C/C++ Source or Header  |  1992-12-02  |  7KB  |  202 lines

  1. /*
  2.  * vmelink.h --
  3.  *
  4.  *    Declarations of interface to the Bit-3 VME link driver routines.
  5.  *
  6.  * Copyright 1990 Regents of the University of California
  7.  * Permission to use, copy, modify, and distribute this
  8.  * software and its documentation for any purpose and without
  9.  * fee is hereby granted, provided that the above copyright
  10.  * notice appear in all copies.  The University of California
  11.  * makes no representations about the suitability of this
  12.  * software for any purpose.  It is provided "as is" without
  13.  * express or implied warranty.
  14.  *
  15.  * $Header: /sprite/src/lib/include/dev/RCS/vmelink.h,v 1.4 92/07/09 18:28:31 elm Exp Locker: elm $ SPRITE (Berkeley)
  16.  */
  17.  
  18. #ifndef _VMELINK
  19. #define _VMELINK
  20.  
  21. /*
  22.  * Sun4 address space the link occupies (2=d16, 3=d32)
  23.  */
  24. #define DEV_VMELINK_ADDR_SPACE        2
  25.  
  26. /*
  27.  * Size of the VME link useful address space in pages.
  28.  */
  29. #define DEV_VMELINK_VME_START_ADDR    0xff400000
  30. #define DEV_VMELINK_VME_ADDR_SIZE    0x00020000
  31. #define DEV_VMELINK_NUM_PAGES        (VMELINK_VME_ADDR_SIZE / PAGSIZ)
  32.  
  33. /*
  34.  * Flags used to set the local command register.
  35.  */
  36. #define DEV_VMELINK_CLEAR_LOCAL_ERRS    0x80
  37. #define DEV_VMELINK_CLEAR_LOCAL_PF_INT    0x40
  38. #define DEV_VMELINK_SET_REMOTE_PT_INT    0x20
  39. #define DEV_VMELINK_LOCAL_DISABLE_INT    0x04
  40.  
  41. /*
  42.  * Flags in the status registers.
  43.  */
  44. #define DEV_VMELINK_PARITY_ERROR        0x80
  45. #define DEV_VMELINK_REMOTE_BUSERR        0x40
  46. #define DEV_VMELINK_LOCAL_PR_INT        0x20
  47. #define DEV_VMELINK_LOCAL_PT_INT        0x02
  48. #define DEV_VMELINK_REMOTE_DOWN            0x01
  49.  
  50. /*
  51.  * Flags used to set remote command register 1.
  52.  */
  53. #define DEV_VMELINK_REMOTE_RESET        0x80
  54. #define DEV_VMELINK_CLEAR_REMOTE_PT_INT        0x40
  55. #define DEV_VMELINK_SET_REMOTE_PR_INT        0x20
  56. #define DEV_VMELINK_LOCK_VME            0x10
  57. #define DEV_VMELINK_USE_PAGE_REG        0x08
  58.  
  59. /*
  60.  * Flags used to set remote command register 2.
  61.  */
  62. #define    DEV_VMELINK_REMOTE_PAUSE_16        0x80
  63. #define DEV_VMELINK_REMOTE_USE_ADDRMOD        0x40
  64. #define DEV_VMELINK_REMOTE_DMA_BLOCK_MODE    0x20
  65. #define DEV_VMELINK_REMOTE_DISABLE_INT        0x10
  66.  
  67. /*
  68.  * Window size flags (for IOC_VMELINK_SET_WINDOW_SIZE IO control).
  69.  */
  70. #define DEV_VMELINK_WINDOW_SIZE_64K        0x00
  71. #define DEV_VMELINK_WINDOW_SIZE_128K        0x01
  72. #define DEV_VMELINK_WINDOW_SIZE_256K        0x03
  73. #define DEV_VMELINK_WINDOW_SIZE_512K        0x07
  74. #define DEV_VMELINK_WINDOW_SIZE_1M        0x0f
  75.  
  76. #define    DEV_VMELINK_MIN_DMA_SIZE    256
  77. #define    DEV_VMELINK_DMA_START        0x80
  78. #define    DEV_VMELINK_DMA_LONGWORD    0x10
  79. #define    DEV_VMELINK_DMA_LOCAL_PAUSE    0x08
  80. #define    DEV_VMELINK_DMA_ENABLE_INTR    0x04
  81. #define    DEV_VMELINK_DMA_DONE        0x02
  82. #define    DEV_VMELINK_DMA_BLOCK_MODE    0x01
  83. #define    DEV_VMELINK_DMA_LOCAL_TO_REMOTE    0x20
  84. #define    DEV_VMELINK_DMA_REMOTE_TO_LOCAL    0x00
  85.  
  86. /*
  87.  *    This is the control register structure for the VME link
  88.  *    boards.  All of the rsvX fields are listed as reserved in
  89.  *    the manual.
  90.  *
  91.  */
  92.  
  93. typedef struct DevVMElinkCtrlRegs {
  94.     volatile unsigned char rsv0;
  95.     volatile unsigned char LocalCmd;        /* local command register */
  96.     volatile unsigned char rsv1;
  97.     volatile unsigned char LocalStatus;        /* local status reg */
  98.     volatile unsigned char LocalAddrMod;    /* local addr modifier reg */
  99.     volatile unsigned char rsv3;
  100.     volatile unsigned char rsv4;
  101.     volatile unsigned char LocalIntrVec;    /* local intr vector reg */
  102.     volatile unsigned char RemoteCmd2;        /* remote command register 2 */
  103.     volatile unsigned char RemoteCmd1;        /* remote command register 1 */
  104.     volatile unsigned char RemotePageAddrHigh;    /* hi 8 bits remote pg addr */
  105.     volatile unsigned char RemotePageAddrLow;    /* low 8 bits remote pg addr */
  106.     volatile unsigned char RemoteAddrMod;    /* remote address modifier */
  107.     volatile unsigned char rsv5;
  108.     volatile unsigned char RemoteIackReadHigh;    /* intr acknowledge read hi */
  109.     volatile unsigned char RemoteIackReadLow;    /* intr acknowledge read low */
  110. } DevVMElinkCtrlRegs;
  111.  
  112. typedef struct DevVMElinkDmaRegs {
  113.     volatile unsigned char localDmaCmdReg;
  114.     volatile unsigned char rsv0;
  115.     volatile unsigned char localDmaAddr3;
  116.     volatile unsigned char localDmaAddr2;
  117.     volatile unsigned char localDmaAddr1;
  118.     volatile unsigned char localDmaAddr0;
  119.     volatile unsigned char dmaLength2;
  120.     volatile unsigned char dmaLength1;
  121.     volatile unsigned char rsv1;
  122.     volatile unsigned char rsv2;
  123.     volatile unsigned char remoteDmaAddr3;
  124.     volatile unsigned char remoteDmaAddr2;
  125.     volatile unsigned char remoteDmaAddr1;
  126.     volatile unsigned char remoteDmaAddr0;
  127.     volatile unsigned char rsv3;
  128.     volatile unsigned char rsv4;
  129. } DevVMElinkDmaRegs;
  130.  
  131. /*
  132.  * Used in the IOControl status call.
  133.  */
  134. typedef struct DevVMElinkStatus {
  135.     int LocalStatus;
  136.     int RemoteStatus;
  137. } DevVMElinkStatus;
  138.  
  139. /*
  140.  * Structure used to map VME bus addresses into kernel memory.
  141.  */
  142. typedef struct DevVMElinkMapRequest {
  143.     void *VMEAddress;        /* VME address to map */
  144.     int mapSize;        /* number of bytes to map in */
  145.     void *kernelAddress;    /* resulting kernel address */
  146. } DevVMElinkMapRequest;
  147.  
  148. #define    DEV_VMELINK_TO_REMOTE    0xf5
  149. #define    DEV_VMELINK_TO_LOCAL    0x3d
  150.  
  151. /*
  152.  * Used to access memory over the link board.
  153.  */
  154. typedef struct DevVMElinkAccessMem {
  155.     Address    destAddress;
  156.     int        size;
  157.     int        direction;
  158.     int        data[1];
  159. } DevVMElinkAccessMem;
  160.  
  161. #define IOC_VMELINK            (16 << 16)
  162.  
  163. /*
  164.  * These are the special VME link IO control calls.  They
  165.  * perform the following functions (and all constants start with
  166.  * IOC_VMELINK_).
  167.  *
  168.  * STATUS    return the link's status in the VMElinkStatus structure.
  169.  * PING_REMOTE    return SUCCESS if the remote link card is up
  170.  * MAP_MEMORY    map an area of memory specified by a VMElinkMapRequest struct
  171.  * NO_ADDRMOD    turn off the address modifier register
  172.  * SET_ADDRMOD    set the address modifier to use instead of the VME bus default
  173.  * NO_WINDOW    turn off the paging register on the link card
  174.  * SET_WINDOW    set the paging register on the link card and turn on paging
  175.  * SET_WINDOW_SIZE set the size of the paging register window
  176.  * LOW_VME    seeks refer to addresses 0-7fffffff
  177.  * HIGH_VME    seeks refer to addresses 8000000-ffffffff
  178.  * DEBUG_ON    turns on debugging statements for the VME link driver
  179.  * DEBUG_OFF    turns off debugging statements
  180.  */
  181. #define IOC_VMELINK_STATUS        (IOC_VMELINK | 1)
  182. #define IOC_VMELINK_DEBUG_ON        (IOC_VMELINK | 2)
  183. #define IOC_VMELINK_DEBUG_OFF        (IOC_VMELINK | 3)
  184. #define IOC_VMELINK_PING_REMOTE        (IOC_VMELINK | 4)
  185. #define IOC_VMELINK_NO_ADDRMOD        (IOC_VMELINK | 5)
  186. #define IOC_VMELINK_SET_ADDRMOD        (IOC_VMELINK | 6)
  187. #define IOC_VMELINK_LOW_VME        (IOC_VMELINK | 7)
  188. #define IOC_VMELINK_HIGH_VME        (IOC_VMELINK | 8)
  189. #define    IOC_VMELINK_READ_BOARD_STATUS    (IOC_VMELINK | 9)
  190. #define    IOC_VMELINK_RESET        (IOC_VMELINK | 10)
  191. #define    IOC_VMELINK_READ_REG        (IOC_VMELINK | 11)
  192. #define    IOC_VMELINK_WRITE_REG        (IOC_VMELINK | 12)
  193. #define    IOC_VMELINK_ACCESS_REMOTE_MEMORY (IOC_VMELINK | 13)
  194. #define    IOC_VMELINK_SAFE_COPY_ON    (IOC_VMELINK | 14)
  195. #define    IOC_VMELINK_SAFE_COPY_OFF    (IOC_VMELINK | 15)
  196. #define    IOC_VMELINK_REMOTE_BLOCK_MODE_ON  (IOC_VMELINK | 16)
  197. #define    IOC_VMELINK_REMOTE_BLOCK_MODE_OFF (IOC_VMELINK | 17)
  198. #define    IOC_VMELINK_SET_MIN_DMA_SIZE    (IOC_VMELINK | 18)
  199. #define    IOC_VMELINK_BLOCK_IO        (IOC_VMELINK | 19)
  200.  
  201. #endif /* _VMELINK */
  202.